library(readxl)
library(boot) # Para bootstrapping
library(RcmdrMisc) # Para análisis de tablas de contingencia
library(ggplot2)
library(lsr) # Para el coeficiente V-Cramer
5 Taller 1
6 Introducción
Este documento presenta un análisis estadístico para explorar las relaciones entre diversas variables, incluyendo el hábito de fumar de los padres, el peso del bebé al nacer y las semanas de gestación. Se aplican técnicas de regresión lineal, análisis de tablas de contingencia y se prepara el terreno para un análisis de varianza (ANOVA).
6.0.1 Librerías Requeridas
Se cargan únicamente los paquetes necesarios para la ejecución de este análisis.
6.0.2 Carga de Datos
Se leen los datos desde un archivo Excel. Para que este código funcione, el archivo dataset_trabajo1.xlsx
debe encontrarse en el mismo directorio que este documento Quarto.
<- read_excel("dataset_trabajo1.xlsx")
dataset attach(dataset) # Permite llamar a las columnas por su nombre directamente
# Preparación del data frame para el Ejercicio 1
<- dataset$fnocig
cig.dad <- dataset$mnocig
cig.mom <- data.frame(cig.mom, cig.dad)
padres.cig head(padres.cig)
cig.mom cig.dad
1 0 35
2 0 0
3 0 25
4 0 25
5 0 0
6 0 0
7 EJERCICIO 1
8 A. Correlación entre el Fumar de los Padres (con Remuestreo)
Se evalúa la correlación lineal entre el número de cigarrillos fumados por la madre y el padre. El coeficiente de correlación de Pearson, \(r\), se define como: \[ r_{xy} = \frac{\sum_{i=1}^{n}(x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum_{i=1}^{n}(x_i - \bar{x})^2 \sum_{i=1}^{n}(y_i - \bar{y})^2}} \] Se utiliza bootstrapping (remuestreo) para evaluar la significancia de esta correlación de manera no paramétrica. La idea es generar múltiples muestras con reemplazo de los datos originales y calcular la correlación para cada una, creando una distribución empírica del estadístico.
# Ajuste del modelo de regresión lineal (para referencia)
<- lm(cig.dad ~ 1 + cig.mom, data = padres.cig)
fit summary(fit)
Call:
lm(formula = cig.dad ~ 1 + cig.mom, data = padres.cig)
Residuals:
Min 1Q Median 3Q Max
-31.632 -13.834 -1.919 11.166 31.894
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 13.8344 3.2861 4.210 0.000141 ***
cig.mom 0.3559 0.2114 1.684 0.099960 .
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 16.93 on 40 degrees of freedom
Multiple R-squared: 0.06621, Adjusted R-squared: 0.04286
F-statistic: 2.836 on 1 and 40 DF, p-value: 0.09996
# Correlación observada
<- cor(cig.mom, cig.dad)
correlation
# Función para calcular la correlación en muestras bootstrap
<- function(data, indices) {
boot_corr <- data[indices, ]
d return(cor(d$cig.mom, d$cig.dad))
}
# Ejecución del bootstrapping con 1000 replicaciones
set.seed(123) # Para reproducibilidad
<- boot(padres.cig, boot_corr, R = 1000)
boot_result
# Cálculo de un estadístico Z simple y su p-valor
<- (correlation - mean(boot_result$t)) / sd(boot_result$t)
statistic <- pnorm(statistic, lower.tail = FALSE)
p_value
# Decisión basada en el p-valor
if (p_value < 0.05) {
print("Se rechaza la hipótesis nula de no correlación.")
else {
} print("No se rechaza la hipótesis nula de no correlación.")
}
[1] "No se rechaza la hipótesis nula de no correlación."
9 B. Tablas de Contingencia, Test Chi-Cuadrado y V de Cramer
Se analiza la relación entre dos variables categóricas: si la madre fuma (smoker
) y si el bebé nace con bajo peso (lowbwt
).
9.1 Tablas de Contingencia
Estas tablas resumen las frecuencias conjuntas, marginales y condicionales (perfiles) de las dos variables.
<- smoker
madre.fuma <- lowbwt
bebe.peso <- data.frame(madre.fuma, bebe.peso)
tab
# Creación de la tabla de contingencia
<- xtabs(~madre.fuma + bebe.peso)
Table
# Frecuencias Absolutas con totales
addmargins(Table)
bebe.peso
madre.fuma 0 1 Sum
0 19 1 20
1 17 5 22
Sum 36 6 42
# Frecuencias Relativas (porcentajes sobre el total)
totPercents(Table)
0 1 Total
0 45.2 2.4 47.6
1 40.5 11.9 52.4
Total 85.7 14.3 100.0
# Perfiles Fila (distribución del peso del bebé para cada categoría de madre)
rowPercents(Table)
bebe.peso
madre.fuma 0 1 Total Count
0 95.0 5.0 100 20
1 77.3 22.7 100 22
# Perfiles Columna (distribución de madre fumadora para cada categoría de peso)
colPercents(Table)
bebe.peso
madre.fuma 0 1
0 52.8 16.7
1 47.2 83.3
Total 100.0 100.0
Count 36.0 6.0
9.2 Test Chi-Cuadrado de Independencia
Este test evalúa si existe una asociación estadísticamente significativa entre las dos variables. - \(H_0\): Las variables son independientes. - \(H_1\): Las variables no son independientes. El estadístico de prueba es: \[ \chi^2 = \sum_{i,j} \frac{(O_{ij} - E_{ij})^2}{E_{ij}} \]
# Test Chi-cuadrado. Se usa simulación por el bajo número de observaciones.
chisq.test(as.factor(madre.fuma), as.factor(bebe.peso), simulate.p.value = TRUE, B = 2000)
Pearson's Chi-squared test with simulated p-value (based on 2000
replicates)
data: as.factor(madre.fuma) and as.factor(bebe.peso)
X-squared = 2.6886, df = NA, p-value = 0.1859
Interpretación: Un p-valor > 0.05 sugiere que no hay evidencia suficiente para rechazar la hipótesis nula de independencia.
9.3 V de Cramer
Este coeficiente mide la fuerza de la asociación entre dos variables categóricas, variando de 0 (sin asociación) a 1 (asociación perfecta). \[ V = \sqrt{\frac{\chi^2}{n \cdot \min(r-1, c-1)}} \] Donde \(n\) es el tamaño total de la muestra, \(r\) el número de filas y \(c\) el número de columnas.
cramersV(madre.fuma, bebe.peso)
Warning in stats::chisq.test(...): Chi-squared approximation may be incorrect
[1] 0.1848935
Interpretación: Un valor de V cercano a 0 indica una asociación muy débil.
10 C. Preparación para ANOVA
Se prepara el data.frame
para realizar un Análisis de Varianza (ANOVA), que se utilizaría para comparar la media de una variable cuantitativa (gestacion
) a través de los grupos definidos por una variable categórica (raza
).
- \(H_0\): Las medias de las semanas de gestación son iguales en todos los grupos raciales (\(\mu_1 = \mu_2 = ... = \mu_k\)).
- \(H_1\): Al menos una de las medias es diferente.
<- race
raza <- Gestation
gestacion <- data.frame(raza, gestacion)
raza.gestion
# El siguiente paso sería ajustar y analizar el modelo ANOVA, por ejemplo:
# anova_model <- aov(gestacion ~ as.factor(raza), data = raza.gestion)
# summary(anova_model)